Spring Cloud微服务(一)--Spring Cloud基础


1. 前言

本文是 << Spring Cloud微服务实战 >> 学习笔记, 以便自己查阅.

2. 什么是微服务

微服务是一种系统架构的设计风格,它主旨在于将一个原本独立的系统,拆分成多个独立运行的小型服务.不同服务之间通过Restful接口进行通讯协作.

拆分的小型服务围绕系统耦合度高的业务功能进行构建;
每个服务都维护自身的数据存储,业务开发,测试,部署机制;
由于是轻量级通讯协作,微服务可以使用不同语言来编写.

3. 如何实施微服务

3.1 引入微服务(与单体应用对比)引发的问题

运维:维护进程数增加,需要一定的开发能力来编排组织进程;
接口:需要交互双方协调发布,完善接口和版本管理,保证接口的正确调用;
分布式环境:拆分后服务只能通过通信来进行协作,所以要考虑分布式环境的因素(网络延迟,分布式事务,异步消息)

3.2 微服务特性

为了解决前面的问题,以下是实施微服务一些原则:

3.2.1 服务组件化

保证每个服务都独立开发,部署,避免一个服务修改引起整个系统的重新部署.

3.2.2 按业务组织团队

以前按照技术层面将团队划分为DBA团队,运维团队,测试团队,后端,前端团队等等,若继续使用这种团队组织方式来实施对微服务架构的开发,当一个服务出现问题时,会引起团队的时间耗费和预算审批.所以在进行微服务架构的开发时,一般按业务线的方式进行拆分.

3.2.3 以产品态度对待服务

对服务整个生命周期负责,持续关注服务的运作情况,并不断分析以帮助用户来改善业务功能.

3.2.4 智能端点与哑管道原则

使用微服务不能简单将函数调用直接改成Restful/RPC调用(避免繁琐的通信), 微服务常用两种服务调用方式:

  1. 基于Http的Restful API(或其它轻量级的消息发送协议) - 请求响应模型,同步阻塞

  2. 基于轻量级消息总线(MQ) - 观察模型

关于智能端点与哑管道的概念

哑管道是指消息的通讯,管道是不会通知端点消息的内容,结构,仅提供一个可靠的信息交互功能,称为”哑”.
智能端点是指端点要主动订阅管道的消息,去解析里面的内容,称为”智能”.

3.2.5 去中心化治理

整个架构采用轻量级协议定义接口,各个组件根据具体业务特点进行技术选型.

3.2.6 去中心化管理数据

每个服务管理其自有的数据库.(在改造过程中,将数据库的数据拆分到其它数据库中(Mysql,MongoDB,Redis))

面临的新问题

分布式事务,所以尽量避免事务,保证各服务之间是”无事务”的调用;
一致性问题,保证最终一致性;

3.2.7 基础设施自动化

由于服务数量的增多,务必需要一个”持续交付”平台来支持实施.
自动化测试与自动化部署.

3.2.8 容错设计

微服务架构中,可能存在部分服务故障的情况,处理不好会出现故障蔓延的情况.(一个正常服务频繁调用故障服务,导致大量线程挂起等待超时,最后正常服务也出现了故障)

所以微服务架构中,应快速监测出故障源并尽可能恢复服务.(对每个组件的运行情况(服务状态,断路器状态,吞吐量,网络延迟等)实现监控和日志记录)

3.2.9 演进式设计

实施微服务应该以演进的方式构建.

4. 参考链接

《Spring Cloud微服务实战》读书笔记之基础知识1
《微服务》九大特性重读笔记
<< Spring Cloud微服务实战 >>

谢谢你请我吃糖果!